﻿using System.ComponentModel.DataAnnotations;
using System.ComponentModel;

namespace Demo.PetaPoco.Application.Dtos.Menu;

/// <summary>
/// 路由元数据类，定义路由相关的配置信息
/// </summary>
public class RouteMeta
{
	/// <summary>
	/// 激活图标（菜单/tab）
	/// </summary>
	public string? ActiveIcon { get; set; }

	/// <summary>
	/// 当前激活的菜单，有时候不想激活现有菜单，需要激活父级菜单时使用
	/// </summary>
	public string? ActivePath { get; set; }

	/// <summary>
	/// 是否固定标签页
	/// 默认值：false
	/// </summary>
	[DefaultValue(false)]
	public bool? AffixTab { get; set; }

	/// <summary>
	/// 固定标签页的顺序
	/// 默认值：0
	/// </summary>
	public int? AffixTabOrder { get; set; }

	/// <summary>
	/// 需要特定的角色标识才可以访问
	/// 默认值：空列表
	/// </summary>
	public List<string>? Authority { get; set; }

	/// <summary>
	/// 徽标
	/// </summary>
	public string? Badge { get; set; }

	/// <summary>
	/// 徽标类型
	/// 可选值：dot, normal
	/// </summary>
	public string? BadgeType { get; set; } // 可以考虑使用枚举，见下方说明

	/// <summary>
	/// 徽标颜色
	/// 可选值：default, destructive, primary, success, warning 或自定义字符串
	/// </summary>
	public string? BadgeVariants { get; set; }

	/// <summary>
	/// 当前路由的子级在菜单中不展现
	/// 默认值：false
	/// </summary>
	public bool? HideChildrenInMenu { get; set; }

	/// <summary>
	/// 当前路由在面包屑中不展现
	/// 默认值：false
	/// </summary>
	public bool? HideInBreadcrumb { get; set; }

	/// <summary>
	/// 当前路由在菜单中不展现
	/// 默认值：false
	/// </summary>
	public bool? HideInMenu { get; set; }

	/// <summary>
	/// 当前路由在标签页不展现
	/// 默认值：false
	/// </summary>
	public bool? HideInTab { get; set; }

	/// <summary>
	/// 图标（菜单/tab）
	/// 在 C# 中可以用 string 表示，具体实现取决于你的需求
	/// </summary>
	public string? Icon { get; set; } // 如果需要 Component 类型，需自定义实现

	/// <summary>
	/// iframe 地址
	/// </summary>
	public string? IframeSrc { get; set; }

	/// <summary>
	/// 忽略权限，直接可以访问
	/// 默认值：false
	/// </summary>
	public bool? IgnoreAccess { get; set; }

	/// <summary>
	/// 开启 KeepAlive 缓存
	/// </summary>
	public bool? KeepAlive { get; set; }

	/// <summary>
	/// 外链-跳转路径
	/// </summary>
	public string? Link { get; set; }

	/// <summary>
	/// 路由是否已经加载过
	/// </summary>
	public bool? Loaded { get; set; }

	/// <summary>
	/// 标签页最大打开数量
	/// 默认值：-1
	/// </summary>
	public int? MaxNumOfOpenTab { get; set; }

	/// <summary>
	/// 菜单可以看到，但是访问会被重定向到403
	/// </summary>
	public bool? MenuVisibleWithForbidden { get; set; }

	/// <summary>
	/// 在新窗口打开
	/// </summary>
	public bool? OpenInNewWindow { get; set; }

	/// <summary>
	/// 用于路由->菜单排序
	/// </summary>
	public int? Order { get; set; }

	/// <summary>
	/// 菜单所携带的参数
	/// 使用 Dictionary 表示 Recordable
	/// </summary>
	public Dictionary<string, object>? Query { get; set; }

	/// <summary>
	/// 标题名称
	/// </summary>
	[Required(ErrorMessage = "标题名称是必填项")]
	public string Title { get; set; } = string.Empty; // 在 TS 中是必填字段
}